package com.wyw.design.model.learning.behavioral.template;

/**
 * @Title   客户端
 * @Description 从代码可以看出，在模板模式中，方法分为两类：模版方法和基本方法，而基本方法又分为：抽象方法，具体方法，钩子方法。
 *
 *                  抽象方法：一个抽象方法由抽象类声明，由具体子类实现。在 Java 语言里抽象方法以 abstract 关键字声明；
 *                  具体方法：一个具体方法由抽象类声明并实现，而子类并不能修改或重写，此方法通常会被声明为 final；
 *                  钩子方法：在抽象类中预留一个 “钩子”，也就是实现一个空方法，作为方法的默认实现，子类可以选择重写（重新构建）或者不重写。
 *
 *  一个模板方法是定义在抽象类中的，把基本操作方法组合在一起形成一个总算法或一个总行为的方法。
 * 一个抽象类可以有任意多个模板方法，而不限于一个，每一个模板方法都可以调用任意多个具体方法。
 *
 * @Author Mr Wu yewen.wu.china@gmail.com
 * @Date 2023/4/19 17:00
 * Update History:
 * Author        Time            Content
 */
public class Client {
    public static void main(String[] args) {
        AbstractTemplate tp = new ConcreteTemplateA();
        // 调用子类 A 的模板方法
        tp.templateMethod();
        tp = new ConcreteTemplateB();
        // 调用子类 B 的模板方法
        tp.templateMethod();
    }
}
